#include <limits.h>

int max(int num1, int num2) { return num1>num2 ? num1 : num2;}
int min(int num1, int num2) { return num1<num2 ? num1 : num2;}

int maxProduct(int* nums, int numsSize){

    int local_max, local_min;
    int global_max = INT_MIN;
    int i, temp;

    local_max = local_min = 1;

    for (i=0; i < numsSize; i++) {
        if (nums[i] < 0) {
            temp = local_max;
            local_max = local_min;
            local_min = temp;
        }
        local_min = min(local_min * nums[i], nums[i]);
        local_max = max(local_max * nums[i], nums[i]);
        global_max = max(local_max, global_max);
    }
    return global_max;
}